जावास्क्रिप्ट मॉड्यूल ग्राफ ऑप्टिमायझेशन: डिपेंडन्सी ग्राफचे सरलीकरण | MLOG | MLOG
            document.addEventListener("DOMContentLoaded", function() {
 var lazyloadImages = document.querySelectorAll("img.lazy");

 function lazyload () {
 lazyloadImages.forEach(function(img) {
 if (img.offsetTop < (window.innerHeight + window.pageYOffset)) {
 img.src = img.dataset.src;
 img.classList.remove("lazy");
 }
 });
 if(lazyloadImages.length === 0) {
 document.removeEventListener("scroll", lazyload);
 window.removeEventListener("resize", lazyload);
 window.removeEventListener("orientationChange", lazyload);
 }
 }

 document.addEventListener("scroll", lazyload);
 window.addEventListener("resize", lazyload);
 window.addEventListener("orientationChange", lazyload);
 });
            

कार्यवाही करण्यायोग्य सूचना: स्क्रीनवर लगेच न दिसणाऱ्या प्रतिमा, व्हिडिओ आणि इतर संसाधनांसाठी लेझी लोडिंग लागू करा. `lozad.js` सारख्या लायब्ररी किंवा ब्राउझर-नेटिव्ह लेझी-लोडिंग विशेषता वापरण्याचा विचार करा.

६. ट्री शेकिंग आणि डेड कोड एलिमिनेशन

ट्री शेकिंग हे एक तंत्र आहे जे बिल्ड प्रक्रियेदरम्यान तुमच्या ॲप्लिकेशनमधून न वापरलेला कोड काढून टाकते. यामुळे बंडलचा आकार लक्षणीयरीत्या कमी होऊ शकतो, विशेषतः जर तुम्ही अशा लायब्ररी वापरत असाल ज्यात तुम्हाला गरज नसलेला बराच कोड समाविष्ट आहे.

उदाहरण:

समजा तुम्ही एक युटिलिटी लायब्ररी वापरत आहात ज्यात १०० फंक्शन्स आहेत, परंतु तुम्ही तुमच्या ॲप्लिकेशनमध्ये फक्त ५ वापरता. ट्री शेकिंगशिवाय, संपूर्ण लायब्ररी तुमच्या बंडलमध्ये समाविष्ट केली जाईल. ट्री शेकिंगसह, फक्त तुम्ही वापरत असलेली ५ फंक्शन्सच समाविष्ट केली जातील.

कॉन्फिगरेशन:

तुमचा बंडलर ट्री शेकिंग करण्यासाठी कॉन्फिगर केलेला असल्याची खात्री करा. वेबपॅकमध्ये, प्रोडक्शन मोड वापरताना हे सामान्यतः डीफॉल्टनुसार सक्षम केलेले असते. रोलअपमध्ये, तुम्हाला `@rollup/plugin-commonjs` प्लगइन वापरण्याची आवश्यकता असू शकते.

कार्यवाही करण्यायोग्य सूचना: ट्री शेकिंग करण्यासाठी तुमचा बंडलर कॉन्फिगर करा आणि तुमचा कोड ट्री शेकिंगशी सुसंगत अशा प्रकारे लिहिला गेला आहे याची खात्री करा (उदा. ES मॉड्यूल वापरणे).

७. डिपेंडन्सी कमी करणे

तुमच्या प्रोजेक्टमधील डिपेंडन्सीची संख्या मॉड्यूल ग्राफच्या गुंतागुंतीवर थेट परिणाम करू शकते. प्रत्येक डिपेंडन्सी ग्राफमध्ये भर घालते, ज्यामुळे बिल्डची वेळ आणि बंडलचा आकार वाढू शकतो. तुमच्या डिपेंडन्सीचे नियमितपणे पुनरावलोकन करा आणि ज्यांची आता गरज नाही किंवा ज्यांना लहान पर्यायांनी बदलले जाऊ शकते त्या काढून टाका.

उदाहरण:

एका साध्या कामासाठी मोठी युटिलिटी लायब्ररी वापरण्याऐवजी, स्वतःचे फंक्शन लिहिण्याचा किंवा लहान, अधिक विशेष लायब्ररी वापरण्याचा विचार करा.

कार्यवाही करण्यायोग्य सूचना: `npm audit` किंवा `yarn audit` सारख्या साधनांचा वापर करून तुमच्या डिपेंडन्सीचे नियमितपणे पुनरावलोकन करा आणि डिपेंडन्सीची संख्या कमी करण्याच्या किंवा त्यांना लहान पर्यायांनी बदलण्याच्या संधी ओळखा.

८. बंडल आकार आणि कामगिरीचे विश्लेषण

सुधारणेसाठी क्षेत्रे ओळखण्यासाठी तुमच्या बंडल आकाराचे आणि कामगिरीचे नियमितपणे विश्लेषण करा. webpack-bundle-analyzer आणि Lighthouse सारखी साधने तुम्हाला मोठे मॉड्यूल, न वापरलेला कोड आणि कामगिरीतील अडथळे ओळखण्यास मदत करू शकतात.

उदाहरण (webpack-bundle-analyzer):

तुमच्या वेबपॅक कॉन्फिगरेशनमध्ये `webpack-bundle-analyzer` प्लगइन जोडा.

            const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin;

module.exports = {
 // ... other webpack configuration
 plugins: [
 new BundleAnalyzerPlugin()
 ]
};

            

जेव्हा तुम्ही तुमचा बिल्ड चालवता, तेव्हा प्लगइन एक परस्परसंवादी ट्रीमॅप (interactive treemap) तयार करेल जो तुमच्या बंडलमधील प्रत्येक मॉड्यूलचा आकार दर्शवेल.

कार्यवाही करण्यायोग्य सूचना: तुमच्या बिल्ड प्रक्रियेत बंडल विश्लेषण साधने समाकलित करा आणि ऑप्टिमायझेशनसाठी क्षेत्रे ओळखण्यासाठी नियमितपणे परिणामांचे पुनरावलोकन करा.

९. मॉड्यूल फेडरेशन

मॉड्यूल फेडरेशन (Module Federation), वेबपॅक ५ मधील एक वैशिष्ट्य, तुम्हाला रनटाइमवर वेगवेगळ्या ॲप्लिकेशन्समध्ये कोड शेअर करण्याची परवानगी देते. मायक्रोफ्रंटएंड्स तयार करण्यासाठी किंवा वेगवेगळ्या प्रोजेक्ट्समध्ये सामान्य घटक शेअर करण्यासाठी हे उपयुक्त ठरू शकते. मॉड्यूल फेडरेशन कोडची पुनरावृत्ती टाळून बंडलचा आकार कमी करण्यास आणि कामगिरी सुधारण्यास मदत करू शकते.

उदाहरण (मूलभूत मॉड्यूल फेडरेशन सेटअप):

ॲप्लिकेशन A (होस्ट):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appA",
 remotes: {
 appB: "appB@http://localhost:3001/remoteEntry.js",
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

ॲप्लिकेशन B (रिमोट):

            // webpack.config.js
const ModuleFederationPlugin = require("webpack/lib/container/ModuleFederationPlugin");

module.exports = {
 // ... other webpack configuration
 plugins: [
 new ModuleFederationPlugin({
 name: "appB",
 exposes: {
 './MyComponent': './src/MyComponent',
 },
 shared: ["react", "react-dom"]
 })
 ]
};

            

कार्यवाही करण्यायोग्य सूचना: सामायिक कोड असलेल्या मोठ्या ॲप्लिकेशन्ससाठी किंवा मायक्रोफ्रंटएंड्स तयार करण्यासाठी मॉड्यूल फेडरेशन वापरण्याचा विचार करा.

विशिष्ट बंडलरसाठी विचार

मॉड्यूल ग्राफ ऑप्टिमायझेशनच्या बाबतीत वेगवेगळ्या बंडलर्सची वेगवेगळी सामर्थ्ये आणि कमकुवतता आहेत. येथे काही लोकप्रिय बंडलर्ससाठी विशिष्ट विचार आहेत:

वेबपॅक (Webpack)

रोलअप (Rollup)

पार्सल (Parcel)

जागतिक दृष्टिकोन: वेगवेगळ्या संदर्भांसाठी ऑप्टिमायझेशन अनुकूल करणे

मॉड्यूल ग्राफ ऑप्टिमाइझ करताना, तुमचा ॲप्लिकेशन कोणत्या जागतिक संदर्भात वापरला जाईल याचा विचार करणे महत्त्वाचे आहे. नेटवर्कची स्थिती, डिव्हाइसची क्षमता आणि वापरकर्ता लोकसंख्याशास्त्र यांसारखे घटक वेगवेगळ्या ऑप्टिमायझेशन तंत्रांच्या परिणामकारकतेवर प्रभाव टाकू शकतात.

निष्कर्ष

जावास्क्रिप्ट मॉड्यूल ग्राफ ऑप्टिमाइझ करणे हे फ्रंट-एंड डेव्हलपमेंटचा एक महत्त्वाचा पैलू आहे. डिपेंडन्सी सोपी करून, सर्कुलर डिपेंडन्सी काढून टाकून आणि कोड स्प्लिटिंग लागू करून, तुम्ही बिल्ड परफॉर्मन्समध्ये लक्षणीय सुधारणा करू शकता, बंडलचा आकार कमी करू शकता आणि ॲप्लिकेशन लोडिंगची वेळ वाढवू शकता. सुधारणेसाठी क्षेत्रे ओळखण्यासाठी तुमच्या बंडल आकाराचे आणि कामगिरीचे नियमितपणे विश्लेषण करा आणि तुमच्या ऑप्टिमायझेशन धोरणांना तुमचा ॲप्लिकेशन ज्या जागतिक संदर्भात वापरला जाईल त्यानुसार अनुकूल करा. लक्षात ठेवा की ऑप्टिमायझेशन ही एक सतत चालणारी प्रक्रिया आहे आणि उत्कृष्ट परिणाम मिळविण्यासाठी सतत देखरेख आणि परिष्करण आवश्यक आहे.

या तंत्रांचा सातत्याने वापर करून, जगभरातील डेव्हलपर्स अधिक वेगवान, अधिक कार्यक्षम आणि अधिक वापरकर्ता-अनुकूल वेब ॲप्लिकेशन्स तयार करू शकतात.